package models

import (
	"fmt"

	"github.com/EDDYCJY/go-gin-example/pkg/e"
	"github.com/jinzhu/gorm"
)

type Account struct {
	// 用户id
	ID uint64 `gorm:"column:id" json:"id"`
	// 钱包地质（ss58格式）
	WalletAddr string `gorm:"column:wallet_addr" json:"wallet_addr"`
	// 公钥（十六进制，0x开头）
	PublicKey string `gorm:"column:public_key" json:"public_key"`
	// 私钥（十六进制，0x开头）
	PrivateKey string `gorm:"column:private_key" json:"private_key"`
	// 用户积分值
	Coins float64 `gorm:"column:coins" json:"coins"`
	// 更新时间
	UpdateTime DbTime `gorm:"column:update_time" json:"update_time"`
}

func (Account) TableName() string {
	return "accounts"
}

func GetAccountByUserId(userId uint64) (*Account, e.FResult) {
	var data Account
	err := db.Model(&data).Debug().Where("id=? ", userId).First(&data).Error
	if err != nil {
		if err == gorm.ErrRecordNotFound {
			return nil, e.FResult{ErrCode: e.ERROR, ErrMsg: "用户不存在"}
		} else {
			return nil, e.FResult_ERROR
		}
	}
	return &data, e.FResult_OK
}

// GetUserAccountByUserId 获取用户账户信息
func GetAccountByUserIdWithDb(userID uint64, db *gorm.DB) (*Account, error) {
	var account Account
	err := db.Where("id = ?", userID).First(&account).Error
	if err != nil {
		if err == gorm.ErrRecordNotFound {
			return nil, fmt.Errorf("用户积分账号不存在")
		}
		return nil, err
	}
	return &account, nil
}

func UpdateAccountByUserId(userId int64, datas map[string]interface{}) e.FResult {
	err := db.Model(&Account{}).Debug().Where("id =? ", userId).Updates(datas).Error
	if err != nil {
		return e.FResult_ERROR
	} else {
		return e.FResult_OK
	}
}
